package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.api.document.rep.VesselOffHireMaintenanceRespDto;
import com.cmc.cloud.cmclink.doc.api.document.req.VesselOffHireMaintenanceReqDto;
import com.cmc.cloud.cmclink.doc.entity.VesselOffHireMaintenanceDO;
import com.cmc.cloud.cmclink.doc.vo.vesseloffhiremaintenancevo.VesselOffHireMaintenanceCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.vesseloffhiremaintenancevo.VesselOffHireMaintenancePageReqVO;
import com.cmc.cloud.cmclink.doc.vo.vesseloffhiremaintenancevo.VesselOffHireMaintenanceRespVO;
import com.cmc.cloud.cmclink.doc.vo.vesseloffhiremaintenancevo.VesselOffHireMaintenanceUpdateReqVO;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;

/**
 * 整船禁接的船舶维护 Service 接口
 *
 * @author 集运管理员
 */
public interface VesselOffHireMaintenanceService {

    /**
     * 创建整船禁接的船舶维护
     *
     * @param createReqVO 创建信息
     */
    void createVesselOffHireMaintenance(@Valid VesselOffHireMaintenanceCreateReqVO createReqVO);

    /**
     * 更新整船禁接的船舶维护
     *
     * @param updateReqVO 更新信息
     */
    void updateVesselOffHireMaintenance(@Valid VesselOffHireMaintenanceUpdateReqVO updateReqVO);

    /**
     * 删除整船禁接的船舶维护
     *
     * @param id 编号
     */
    void deleteVesselOffHireMaintenance(Long id);

    /**
     * 获得整船禁接的船舶维护
     *
     * @param id 编号
     * @return 整船禁接的船舶维护
     */
    VesselOffHireMaintenanceDO getVesselOffHireMaintenance(Long id);

    /**
     * 获得整船禁接的船舶维护列表
     *
     * @param ids 编号
     * @return 整船禁接的船舶维护列表
     */
    List<VesselOffHireMaintenanceDO> getVesselOffHireMaintenanceList(Collection<Long> ids);

    /**
     * 获得整船禁接的船舶维护分页
     *
     * @param pageReqVO 分页查询
     * @return 整船禁接的船舶维护分页
     */
    PageResult<VesselOffHireMaintenanceRespVO> getVesselOffHireMaintenancePage(VesselOffHireMaintenancePageReqVO pageReqVO);

    /**
     * 整船禁接RPC接口
     *
     * @param vesselOffHireMaintenanceReqDto
     * @return
     */
    List<VesselOffHireMaintenanceRespDto> queryVesselOffHireMaintenance(VesselOffHireMaintenanceReqDto vesselOffHireMaintenanceReqDto);

    /**
     * 整船禁接 检查
     *
     * @param vesselCodeList
     * @param nowDate
     */
    void checkVesselOffHireMaintenanceDate(List<String> vesselCodeList, LocalDate nowDate);

}
